package com.whfc.ms.api.sys.service;

import com.whfc.common.enums.SysRulePlatform;
import com.whfc.common.result.PageData;
import com.whfc.fuum.dto.SysDeptDTO;
import com.whfc.fuum.dto.SysDeptExtraDTO;
import com.whfc.fuum.dto.SysUserDTO;
import com.whfc.fuum.entity.SysUser;
import com.whfc.fuum.param.*;

import java.util.List;

/**
 * @author qzexing
 * @version 1.0
 * @date 2020-12-09 17:53
 */
public interface MsSysDeptService {

    /**
     * 查询用户可以管理的组织机构树
     *
     * @param sysUser
     * @param deptId
     * @param keyword
     * @return
     */
    List<SysDeptDTO> getDeptTree(SysUser sysUser, Integer deptId, String keyword);

    /**
     * 添加组织机构
     *
     * @param deptAdd
     * @return
     */
    void addDept(SysDeptAdd deptAdd);

    /**
     * 编辑组织机构
     *
     * @param deptEdit
     */
    void editDept(SysDeptEdit deptEdit);

    /**
     * 删除机构(逻辑删除)
     *
     * @param deptId
     */
    void delDept(Integer deptId);

    /**
     * 组织结构列表页
     *
     * @param request
     * @return
     */
    PageData<SysDeptDTO> list(AppDeptListParam request);

    /**
     * 根据组织机构获取用户可以查看的组织机构列表
     *
     * @param sysUser
     * @param deptId
     * @param ruleCode
     * @param platform
     * @return
     */
    List<SysDeptDTO> getDeptListByRuleCode(SysUser sysUser, Integer deptId, String ruleCode, SysRulePlatform platform);


    /**
     * 组织机构位置移动
     *
     * @param request
     */
    void indexMove(SysDeptMoveIndex request);

    /**
     * 导入已有用户
     *
     * @param request
     */
    void importUser(SysDeptUserImport request);

    /**
     * 移除用户
     *
     * @param deptId
     * @param userId
     */
    void removeUser(Integer deptId, Integer userId);

    /**
     * 获取可以导入的人员列表
     *
     * @param sysUser
     * @param deptId   组织机构ID
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @return 人员列表
     */
    PageData<SysUserDTO> getImportUserList(SysUser sysUser, Integer deptId, Integer pageNum, Integer pageSize, String keyword);

    PageData<SysUserDTO> getImportEmpUserList(SysUser sysUser, Integer deptId, Integer pageNum, Integer pageSize, String keyword);
    /**
     * 获取组织机构扩展信息
     *
     * @param deptId 组织机构ID
     * @return 组织机构扩展信息
     */
    SysDeptExtraDTO getDeptExtra(Integer deptId);

    /**
     * 设置组织机构扩展信息
     *
     * @param param 参数
     */
    void setDeptExtra(SysDeptExtraParam param);

    /**
     * 获取扩展信息自定义字段
     *
     * @param deptId 组织机构ID
     * @return 扩展信息自定义字段
     */
    String getExtraCustomizeField(Integer deptId);
}
